#ifndef HOMEPAGEWIDGET_H
#define HOMEPAGEWIDGET_H

#include <QWidget>
#include <QList>
#include <QMap>
#include <QVBoxLayout>
#include <QPushButton>


namespace Ui {
class HomePageWidget;
}

// 向服务器获取视频列表的方式
enum VideoListStyle
{
    AllStyle,        // 所有视频类型
    KindStyle,       // 分类视频列表
    TagStyle,        // 标签视频列表
    SearchStyle      // 搜索视频列表
};

class HomePageWidget : public QWidget
{
    Q_OBJECT

public:
    explicit HomePageWidget(QWidget *parent = nullptr);
    ~HomePageWidget();

private:
    // 初始化分类和标签处的按钮
    void initKindsAndTags();
    // 初始化刷新和置顶按钮
    void initRefreshAndTop();
    // 初始化视频列表
    void initVideos();

    void connectSignalAndSlot();

    // 创建按钮(分类+标签)
    QPushButton* buildSelectBtn(QWidget* parent, const QString& text, const QString& color);
    // 刷新不同分类的标签
    void resetTags(const QList<QString> &tags);
    // 清除布局管理器中的项, 即清空QGrideLayoyut中的旧视频数据
    void clearLayoutVidoes();

private slots:
    // 处理分类按钮被点击
    void onKindBtnClicked(QPushButton* clickedKindBtn);
    // 处理标签按钮被点击
    void onTagBtnClicked(QPushButton* clickedTagBtn);
    // 处理刷新按钮被点击
    void onRefreshBtnClicked();
    // 处理置顶按钮被点击
    void onTopBtnClicked();
    // 获取搜索框编辑的文本
    void onSearchVideos(const QString& searchText);
    // 获取所有视频列表的槽函数
    void updateVideoList();
    // 获取下一页视频
    void OnScrollBarValueChanged(int value);

private:
    Ui::HomePageWidget *ui;
    QString curKind = "";       // 保存当前获取哪个分类下的视频
    QString curTag = "";        // 保存当前获取哪个标签下的视频
    QString curSearch = "";        // 保存当前获取哪个标签下的视频

    // 标记最近一次获取视频列表的方式
    VideoListStyle videoListStyle;
};

#endif // HOMEPAGEWIDGET_H
